# 数据分析题目解答(建议先赞后看，养成习惯 如果不赞，先拉出去枪毙两分钟 作者：小匠IT)
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.font_manager import FontProperties

# 设置中文字体以正确显示中文标签
font = FontProperties(fname='fonts/SIMSUN.TTC')

# 创建数据框
data = {
    '年份': [2013, 2014, 2015, 2016, 2017, 2018, 2019],
    '交易规模（亿元）': [126.7, 274.5, 497.1, 889.2, 1308.3, 2045.3, 2888.4]
}
df = pd.DataFrame(data)

# 创建图形对象
fig, ax = plt.subplots(figsize=(10, 6))

# 绘制折线图
ax.plot(df['年份'], df['交易规模（亿元）'], marker='o', label='交易规模')

# 指数拟合
x = df['年份'].values
y = df['交易规模（亿元）'].values
z = np.polyfit(x, np.log(y), 1, w=np.sqrt(y))
p = np.poly1d(z)
y_exp = np.exp(p(x))

# 添加指数趋势线
ax.plot(x, y_exp, 'r--', label='指数趋势线')

# 计算R平方值
residuals = y - y_exp
ss_res = np.sum(residuals**2)
ss_tot = np.sum((y-np.mean(y))**2)
r_squared = 1 - (ss_res / ss_tot)

# 在图表中添加公式及R平方值
formula = f'y = {np.exp(z[1]):.2f} * exp({z[0]:.4f} * x)'
r_square_text = f'R² = {r_squared:.2f}'
plt.text(2013.5, 2500, formula, fontsize=12, fontproperties=font)
plt.text(2013.5, 2300, r_square_text, fontsize=12, fontproperties=font)

# 设置标题和标签
ax.set_title('2013-2019年中国生鲜电商市场交易规模', fontproperties=font, fontsize=16)
ax.set_xlabel('年份', fontproperties=font)
ax.set_ylabel('交易规模（亿元）', fontproperties=font)
ax.legend(prop=font)

# 调整布局
fig.tight_layout()

# 显示图表
plt.show()

# 如果需要保存图表图像，请取消下一行的注释，并确保输出目录存在
# fig.savefig("output/transaction_scale_with_exponential_trend.png")